/*
 * GenerateDialog.java
 *
 *  created: 16.11.2011
 *  charset: UTF-8
 *  license: MIT (X11) (See LICENSE file for full license)
 */
package cz.mp.k3bg.gui;

import cz.mp.k3bg.core.BookFiles;
import cz.mp.k3bg.core.StyleGenerator;
import java.awt.event.ActionEvent;
import java.io.IOException;
import javax.swing.*;


/**
 * Předek dialogů pro generování.
 * 
 * @author Martin Pokorný
 * @version 0.1
 */
public abstract class GenerateDialog extends JDialog {

    /**
     * Pracovní seznam souborů.
     * Zde je potřeba definice zdrojových souborů, ze kterých se vytváří obsah.
     */    
    protected BookFiles bookFiles;

    /** Jméno souboru vygenerovaného v tomto dialogu. */
    protected String generatedFileName = null;

    
    /**
     *
     */
    public GenerateDialog() {
        this(null);        
    }

    /**
     *
     * @param owner
     */
    public GenerateDialog(JFrame owner) {
        super(owner, ModalityType.APPLICATION_MODAL);
        initEscKeyAction();      
    }
    
    
    protected abstract void generate();

    /**
     * 
     * @throws IOException 
     * @throws IllegalStateException
     */
    protected void generateBaseStyle() throws IOException {
        generateBaseStyle(this.bookFiles);
    }

    /**
     * 
     */
    protected void closeDialog() {
        setVisible(false);
    }
    
    /**
     * 
     */
    private void initEscKeyAction() {
        KeyStroke escape = KeyStroke.getKeyStroke("ESCAPE");        
		this.getRootPane().getInputMap(
                JComponent.WHEN_IN_FOCUSED_WINDOW).put(escape, "ESCAPE");
		this.getRootPane().getActionMap().put("ESCAPE", new HideAction());          
    }
    
    /**
     *
     * @throws IOException
     * @throws IllegalStateException
     */
    protected void generateBaseStyle(BookFiles bf) throws IOException {
        if (bf == null) {
            throw new IllegalStateException("bf(=bookFiles) = null");
        }
        StyleGenerator.generateDefault(bf.getWorkingDirPath());
    }
    
    // -------------------------------------------------------------------------
    
    /**
     * 
     */
    private class HideAction extends AbstractAction {
        @Override
        public void actionPerformed(ActionEvent e) {
            closeDialog();
        }
    }
}   // GenerateDialog.java

